package concesionaria;

import javax.swing.JInternalFrame;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 *
 * @author Guillermo
 * @author Matias
 */
public class VentanaEntregaDeAuto extends JInternalFrame implements ItemListener, ActionListener {

    static int openFrameCount = 0;
    static int ventanaNro = 100 * 1;
    static final int xOffset = ventanaNro + 30, yOffset = 30;
    JButton entrePlan, entreCtdo;
    JComboBox empleados = new JComboBox();
    JComboBox clientesp = new JComboBox();
    JComboBox clientesi = new JComboBox();
    JComboBox inscripcion = new JComboBox();
    JComboBox tipo = new JComboBox();
    JTextField chasis = new JTextField();
    JTextField motor = new JTextField();
    JTextField color = new JTextField();
    JTextField patente = new JTextField();
    JLabel lempleado = new JLabel("Seleccione Empleado");
    JLabel lcliente = new JLabel("Seleccione Cliente");
    JLabel linscripcion = new JLabel("Seleccione Inscripcion");
    JLabel ltipo = new JLabel("Seleccione Tipo de entrega");
    JLabel lchasis = new JLabel("Ingrese #Chasis");
    JLabel lmotor = new JLabel("Ingrese #Motor");
    JLabel lpatente = new JLabel("Ingrese Patente");
    JLabel lcolor = new JLabel("Ingrese Color");
    String emp[] = new String[40];
    String cli[] = new String[40];
    String insc[] = new String[40];
    String promos[] = new String[40];
    int cliid[] = new int[40];
    int promid[] = new int[40];
    int empid[] = new int[40];
    int inscid[] = new int[40];
    EntregaDeAuto entregaAuto;
    JButton cancelar, aceptar, refrescar;
    String elecciones[] = new String[5];

    public VentanaEntregaDeAuto() {
        super("Entrega de Auto",
                true, //resizable
                true, //closable
                true, //maximizable
                true);//iconifiable

        //...Create the GUI and put it in the window...
        entreCtdo = new JButton("Entrega Inmediata");
        entrePlan = new JButton("Entrega por plan");
        entreCtdo.setActionCommand("inmediata");
        entrePlan.setActionCommand("plan");
        entreCtdo.addActionListener(this);
        entrePlan.addActionListener(this);
        JPanel contentPane = new JPanel();
        contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        contentPane.setLayout(new BoxLayout(contentPane,
                BoxLayout.PAGE_AXIS));
        contentPane.add(entreCtdo, BorderLayout.CENTER);
        contentPane.add(entrePlan, BorderLayout.CENTER);
        setContentPane(contentPane);

        //...Then set the window size or call pack...

        pack();

        //Set the window's location.
        openFrameCount++;
        setLocation(ventanaNro + ((xOffset - (xOffset - 30)) * openFrameCount), yOffset * openFrameCount);

    }

    public JComboBox Clientes() {
        JComboBox clientes = new JComboBox();
        ResultSet rs;
        int i = 0;
        try {
            String SQL = "SELECT * FROM persona WHERE tipo LIKE 'cli'";
            Statement stmt;
            stmt = DBCon.getConexion().createStatement();
            rs = stmt.executeQuery(SQL);
            while (rs.next()) {
                cli[i] = rs.getString("numero") + " : " + rs.getString("nombre") + " " + rs.getString("apellido");
                cliid[i] = rs.getInt("ID");
                i++;
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Error en SQL: " + e.getMessage());
        }
        clientes.addItem(" ");
        for (int j = 0; j < i; j++) {
            clientes.addItem(cli[j]);
        }
        return clientes;
    }

    public JComboBox Empleados() {
        JComboBox empleados = new JComboBox();
        ResultSet rs;
        int i = 0;
        try {
            String SQL = "SELECT * FROM persona WHERE tipo LIKE 'emp'";
            Statement stmt;
            stmt = DBCon.getConexion().createStatement();
            rs = stmt.executeQuery(SQL);
            while (rs.next()) {
                emp[i] = rs.getString("numero") + " : " + rs.getString("nombre") + " " + rs.getString("apellido");
                empid[i] = rs.getInt("ID");
                i++;
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Error en SQL: " + e.getMessage());
        }
        empleados.addItem(" ");
        for (int j = 0; j < i; j++) {
            empleados.addItem(emp[j]);
        }
        return empleados;
    }

    public JComboBox Inscripciones(int cliente) {
        JComboBox inscripciones = new JComboBox();
        ResultSet rs;
        int i = 0;
        try {
            String SQL = "SELECT i.id, l.nombre, a.marca, a.modelo, i.fecha   FROM inscripcion i, persona p, plan l , auto a WHERE i.`ID_cli`= p.`ID` AND i.`ID_plan`=l.`ID` AND i.`ID_auto`= a.`ID`AND i.`ID_cli` = " + cliente;
            Statement stmt;
            stmt = DBCon.getConexion().createStatement();
            rs = stmt.executeQuery(SQL);
            while (rs.next()) {
                insc[i] = rs.getString("nombre") + " : " + rs.getString("marca") + " " + rs.getString("modelo") + "|" + rs.getString("fecha");
                inscid[i] = rs.getInt("id");
                i++;
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Error en SQL: " + e.getMessage());
        }
        inscripciones.addItem(" ");
        for (int j = 0; j < i; j++) {
            inscripciones.addItem(insc[j]);
        }
        return inscripciones;
    }

    public void DibujarEnPlan(int cliente) {
        JPanel contentPane = new JPanel();
        if (cliente == 0) {

            contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
            contentPane.setLayout(new BoxLayout(contentPane,
                    BoxLayout.PAGE_AXIS));
            clientesp = Clientes();
            clientesp.addItemListener(this);

            contentPane.add(lcliente);
            contentPane.add(clientesp);

        } else {
            this.setTitle("Entrega de Auto | " + cliente);
            refrescar = new JButton("Atras");
            cancelar = new JButton("Cancelar");
            aceptar = new JButton("Aceptar");
            refrescar.addActionListener(this);
            refrescar.setActionCommand("refrescar");
            cancelar.setActionCommand("cancelar");
            aceptar.setActionCommand("aceptarplan");
            cancelar.addActionListener(this);
            aceptar.addActionListener(this);
            empleados = Empleados();
            inscripcion = Inscripciones(cliente);
            tipo.removeAllItems();
            tipo.addItem(" ");
            tipo.addItem("Licitacion");
            tipo.addItem("Sorteo");
            tipo.addItem("Entrega");
            empleados.addItemListener(this);
            inscripcion.addItemListener(this);
            tipo.addItemListener(this);
            contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
            contentPane.setLayout(new BoxLayout(contentPane,
                    BoxLayout.PAGE_AXIS));
            contentPane.add(lempleado);

            contentPane.add(empleados);
            contentPane.add(linscripcion);
            contentPane.add(inscripcion);
            contentPane.add(ltipo);
            contentPane.add(tipo);
            contentPane.add(lchasis);
            contentPane.add(chasis);
            contentPane.add(lmotor);
            contentPane.add(motor);
            contentPane.add(lcolor);
            contentPane.add(color);
            contentPane.add(lpatente);
            contentPane.add(patente);
            contentPane.add(refrescar);
            contentPane.add(cancelar, BorderLayout.WEST);
            contentPane.add(aceptar, BorderLayout.EAST);
        }
        setContentPane(contentPane);
        pack();
    }

    public void DibujarEntCtdo() {
        cancelar = new JButton("Cancelar");
        aceptar = new JButton("Aceptar");
        cancelar.setActionCommand("cancelar");
        aceptar.setActionCommand("aceptarctdo");


        JPanel contentPane = new JPanel();
        contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        contentPane.setLayout(new BoxLayout(contentPane,
                BoxLayout.PAGE_AXIS));
        contentPane.add(cancelar, BorderLayout.WEST);
        contentPane.add(aceptar, BorderLayout.EAST);
        setContentPane(contentPane);
        pack();

    }

    @Override
    public void itemStateChanged(ItemEvent event) {

        int control = 0;
        Object i = event.getSource();
        if (i == clientesp) {
            int eleccion = clientesp.getSelectedIndex() - 1;
            if (eleccion < 0) {

                elecciones[0] = "0";
            } else {
                DibujarEnPlan(cliid[eleccion]);
                elecciones[0] = cli[eleccion];

            }
        }
        if (i == empleados) {
            int eleccion = empleados.getSelectedIndex() - 1;
            if (eleccion < 0) {
                elecciones[1] = "0";
            } else {
                elecciones[1] = emp[eleccion];
            }
        }

        if (i == inscripcion) {
            int eleccion = inscripcion.getSelectedIndex() - 1;
            if (eleccion < 0) {
                elecciones[2] = "0";
            } else {
                elecciones[2] = insc[eleccion];
            }
        }

        if (i == tipo) {
            int eleccion = tipo.getSelectedIndex() - 1;
            if (eleccion < 0) {
                elecciones[3] = "0";
            } else {
                if (eleccion == 0) {
                    elecciones[3] = "Licitacion";
                } else {
                    if (eleccion == 1) {
                        elecciones[3] = "Sorteo";
                    } else {
                        if (eleccion == 2) {
                            elecciones[3] = "Entrega";
                        }
                    }
                }
            }
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        int error = 0;
        if ("inmediata".equals(e.getActionCommand())) {
            DibujarEntCtdo();
        }
        if ("plan".equals(e.getActionCommand())) {
            DibujarEnPlan(0);
        }
        if ("refrescar".equals(e.getActionCommand())) {
            DibujarEnPlan(0);
        }
        if ("cancelar".equals(e.getActionCommand())) {
            openFrameCount--;
            this.setVisible(false);
        }
        if ("aceptarplan".equals(e.getActionCommand())) {
            for (int i = 0; i < 4; i++) {
                if ("0".equals(elecciones[i]) || elecciones[i] == null) {
                    JOptionPane.showMessageDialog(null, "No ha completado con todos los campos", "verifique los datos", 2);
                    error = 1;
                    i = 4;
                }
            }
            if (error == 0) {
                if ("".equals(motor.getText()) || "".equals(chasis.getText()) || "".equals(color.getText()) || "".equals(patente.getText())) {
                    error = 1;
                    JOptionPane.showMessageDialog(null, "No ha completado con todos los campos", "verifique los datos", 2);
                }
                if (error == 0) {
                    int resultado = JOptionPane.showConfirmDialog(null, "Confirmar inscrpcion\n" + elecciones[0] + "\n" + elecciones[1] + "\n" + elecciones[2] + "\n" + elecciones[3] + "\n" + chasis.getText() + "\n" + motor.getText() + "\n" + color.getText() + "\n" + patente.getText(), null, JOptionPane.YES_NO_OPTION);
                    if (resultado == 0) {
                        entregaAuto = new EntregaDeAuto();
                        boolean error2 = entregaAuto.InicializarPlan(this.tipo.getSelectedIndex(), empid[empleados.getSelectedIndex() - 1], inscid[inscripcion.getSelectedIndex() - 1], chasis.getText(), motor.getText(), color.getText(), patente.getText());
                        //Faltan todos los otros errores!!
                        if (error2) {

                            Promocion[] promociones = entregaAuto.getPromos();
                            promos[0] = " ";
                            for (int i = 0; i < promociones.length - 1; i++) {
                                promos[i + 1] = promociones[i].getDescripcion();
                                promid[i + 1] = promociones[i].getId();
                            }
                            String s = (String) JOptionPane.showInputDialog(this, "Elija una promocion a agregar, elija la vacia para terminar",
                                    "Promociones",
                                    JOptionPane.PLAIN_MESSAGE,
                                    null,
                                    promos,
                                    " ");
                            while (s != " ") {

                                for (int i = 0; i < promos.length; i++) {
                                    if (promos[i] == s) {
                                        promos[i] = " ";
                                        entregaAuto.AgregarPromocion(promid[i]);
                                    }
                                }
                                s = (String) JOptionPane.showInputDialog(this, "Elija una promocion a agregar, elija la vacia para terminar",
                                        "Promociones",
                                        JOptionPane.PLAIN_MESSAGE,
                                        null,
                                        promos,
                                        " ");
                            }

                            if (entregaAuto.AltaEntrega()) {
                                JOptionPane.showMessageDialog(null, "La entrega ha sido asentada con exito");
                                this.setVisible(false);
                            } else {
                                JOptionPane.showMessageDialog(null, "Error en los datos ingresados ", "Error", 2);
                            }
                        }
                    }
                }
            }
        }
    }
}
